package com.campus.secondhand.service;

import com.campus.secondhand.common.Result;
import com.campus.secondhand.entity.User;
import com.campus.secondhand.model.dto.LoginDTO;
import com.campus.secondhand.model.dto.RegisterDTO;
import com.campus.secondhand.model.dto.ResetPasswordDTO;
import com.campus.secondhand.model.dto.UpdatePasswordDTO;
import com.campus.secondhand.model.dto.UserInfoDTO;
import com.campus.secondhand.model.vo.UserInfoVO;
import com.campus.secondhand.model.vo.UserLoginVO;

/**
 * 用户服务接口
 */
public interface UserService {

    /**
     * 用户登录
     * 
     * @param loginDTO 登录信息
     * @return 登录结果
     */
    Result<UserLoginVO> login(LoginDTO loginDTO);

    /**
     * 用户注册
     * 
     * @param registerDTO 注册信息
     * @return 注册结果
     */
    Result<User> register(RegisterDTO registerDTO);

    /**
     * 根据ID获取用户信息
     * 
     * @param id 用户ID
     * @return 用户信息
     */
    Result<UserInfoVO> getUserInfo(Long id);

    /**
     * 更新用户信息
     * 
     * @param id          用户ID
     * @param userInfoDTO 用户信息
     * @return 更新结果
     */
    Result<Void> updateUserInfo(Long id, UserInfoDTO userInfoDTO);

    /**
     * 修改密码（已登录用户）
     * 需要验证旧密码
     * 
     * @param id                用户ID
     * @param updatePasswordDTO 密码信息（包含旧密码和新密码）
     * @return 处理结果
     */
    Result<Void> updatePassword(Long id, UpdatePasswordDTO updatePasswordDTO);

    /**
     * 根据用户名查询用户
     * 
     * @param username 用户名
     * @return 用户对象
     */
    Result<User> getByUsername(String username);

    /**
     * 重置密码（忘记密码）
     * 需要验证手机验证码
     * 
     * @param resetPasswordDTO 重置密码信息（包含手机号、验证码和新密码）
     * @return 处理结果
     */
    Result<Void> resetPassword(ResetPasswordDTO resetPasswordDTO);

    /**
     * 根据用户ID获取用户实体
     * 
     * @param userId 用户ID
     * @return 用户实体
     */
    User getUserById(Long userId);
}